我正在尝试用 C 语言进行矩阵卷积。
我尝试过一些方法,但无法正确执行。
N[WIDTH1][WIDTH2]是输入矩阵,M[MASK_WIDTH1][MASK_WIDTH2]是核矩阵, 是P[][]输出矩阵。
第一次尝试:
void convolution_2D(int N[][WIDTH2], int M[][MASK_WIDTH2], int P[][WIDTH2]) {
// find center position of kernel (half of kernel size)
int kCenterX = MASK_WIDTH2 / 2;
int kCenterY = MASK_WIDTH1 / 2;
for (int i = 0; i < WIDTH1; ++i) // rows
{
for (int j = 0; j < WIDTH2; ++j) // columns
{
for (int m = 0; m < MASK_WIDTH1; ++m) // kernel rows
{
int …Run Code Online (Sandbox Code Playgroud) 我正在创建一个网络应用程序.
我有一个MyUI延伸UI.
public class MyUI extends UI {
public static Authentication AUTH;
@Override
protected void init(VaadinRequest vaadinRequest) {
AUTH = new Authentication();
updateContent();
}
//other methods
}
Run Code Online (Sandbox Code Playgroud)
在Authentication()我有用户登录.当我注销时,该用户被设置为null.
我注意到当我从两个设备访问服务器时,所以当我应该有两个连接到服务器时,当有人进行注销时,另一个也注销了.
在Authentication类中有以下方法:
public void doLogout() {
System.out.println("User: " + this.user.getMail() + " has logged out.");
this.user = null;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从其他帐户注销时,我收到错误,user.getMail()因为用户已设置为null.
是com.vaadin.ui.UI独一无二的?如何处理Vaadin中的不同连接?
我不太了解__restrict__CUDA中标签的概念.
我已经读过使用__restrict__避免指针别名,特别是如果指向的变量是只读的,变量的读取被优化,因为它被缓存.
这是代码的简化版本:
__constant__ float M[M_DIM1][M_DIM2];
__host__ void function(float N[][DIM2], float h_M[][M_DIM2], float P[][DIM2]);
__global__ void kernel_function(const float* __restrict__ N, float *P);
__host__ void function(float N[][DIM2], float h_M[][M_DIM2], float P[][DIM2]) {
int IOSize = DIM1 * DIM2 * sizeof(float);
int ConstSize = M_DIM1* M_DIM2* sizeof(float);
float* dN, *dP;
cudaMalloc((void**)&dN, IOSize);
cudaMemcpy(dN, N, IOSize, cudaMemcpyHostToDevice);
cudaMemcpyToSymbol(M, h_M, ConstSize);
cudaMalloc((void**)&dP, IOSize);
dim3 dimBlock(DIM1, DIM2);
dim3 dimGrid(1, 1);
kernel_function << <dimGrid, dimBlock >> >(dN, dP);
cudaMemcpy(P, dP, IOSize, cudaMemcpyDeviceToHost); …Run Code Online (Sandbox Code Playgroud)