#include <iostream>
#include <malloc.h>
#include <cuda_runtime.h>
#include <cutil.h>
#include <time.h>
#include "gl_helper.h"
#include "cpu_bitmap.h"
//#include "cpu_animbmp.h"
#include <stdio.h>
#define DIM 1024
#define PI 3.1415926535897932f
__global__ void kernel(unsigned char *ptr)
{
int x = threadIdx.x + blockIdx.x * blockDim.x;
int y = threadIdx.y + blockIdx.y * blockDim.y;
int offset = x + y * blockDim.x * gridDim.x;
__shared__ float shared[16][16];
const float period = 128.0f;
shared[threadIdx.x][threadIdx.y] = 255 * (sinf(x * 2.0f * PI/period) + 1.0f) *
(sinf(y * 2.0f * PI/period) + 1.0f) / 4.0f;
__syncthreads();
ptr[offset*4 + 0] = 0;
ptr[offset*4 + 1] = shared[15-threadIdx.x][15-threadIdx.y];
ptr[offset*4 + 2] = 0;
ptr[offset*4 + 3] = 255;
}
int main()
{
CPUBitmap bitmap(DIM, DIM);
unsigned char *dev_bitmap;
cudaMalloc((void**)&dev_bitmap, bitmap.image_size());
dim3 grids(DIM/16, DIM/16);
dim3 threads(16, 16);
kernel<<<grids, threads>>>(dev_bitmap);
cudaMemcpy(bitmap.get_ptr(), dev_bitmap, bitmap.image_size(), cudaMemcpyDeviceToHost);
bitmap.display_and_exit();
cudaFree(dev_bitmap);
system("pause");
return 0;
}
==============================================================================
이게 이해가 안가네..ㅡㅡ
누가 힌트점...
NVIDIA 하드웨어 구조를 이해하는게 우선되어야 한다.
아니 그런거 말고...저 프로그램을 돌려보니까 비누방울 모양나오는데 shared[15-threadIdx.x][15-threadIdx.y] <<== 이게 어떤의미 인지를 모르겠어 왜 15에서 스레드 인덱스를 빼는거지?
저거 그냥 방향 반전시킨거 아냐?
저거 지우고 해도 결과는 똑같거나 반전되었거나 그럴거임
큰 의미는 없다능 ㅇ
그나저나 재밌는 함수네
http://www.wolframalpha.com/input/?i=255+*+%28sin%28x+*+2+*+Pi%2F128%29+%2B+1%29+*+%28sin%28y+*+2+*+Pi%2F128%29+%2B+1%29+%2F+4
아 같지는 않겠다. 16x16 패치별로 하는거나 이상하게 나오겠구나 ㅡㅡ)
딱봐도 색깔넣는거
우왕.. 그래픽쪽은 보면 볼수록 신기하네..
우왕.. 그래픽쪽은 보면 볼수록 신기하네..