小编Nay*_*uki的帖子

与 PCI Express 插槽传输速率相关的 GPU 带宽说明 (v1.x - x16)

只需要澄清与 PCI Express 传输速率相关的 GPU 带宽。它将帮助我了解显卡的实际工作原理...

所以要计算带宽:

Memory Speed x Bus Width / 8 = Bandwidth (B/s)
Run Code Online (Sandbox Code Playgroud)

因此,如果我的显卡在 GDDR3 上的总线宽度为 256 位且内存速度为 900MHz:

Bandwidth = 900MHz * 256 / 8 = 28GB/s (28GB/s * 2 = 57GB/s because GDDR3 is double data rate)
Run Code Online (Sandbox Code Playgroud)

PCI Express v1.0 上的单通道传输速率为 250MB/s,因此 16 通道将是 4GB/s。

令我困惑的是,接口(PCIe)的传输速率为 4GB/s,而显卡的传输速率为 57GB/s。

问:那么这会不会因为接口只能传输4GB/s而造成瓶颈?

gpu data-transfer bandwidth video-card memory-bandwidth

2
推荐指数
1
解决办法
3158
查看次数

在同一if语句中检查nullptr和有效索引

这是我正在处理的代码的过度简化版本.我想检查一个索引是否在有效的边界内,如果在给定索引的数组中,在一个if语句中有一个对象.

int main(){
  int* anArray[5]; // in the code there's either an object here or a nullptr
  int anIndex = 2; // something that I get from the depths of my code

  // int* <- typename not allowed
  // elem <- indentifier is undefined
  if(anIndex < 5 && int* elem = anArray[anIndex]){
    // use elem here
  }
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用两个if语句检查索引,然后检查对象,但过了一段时间,if语句到处都有,我想避免这种情况.我究竟做错了什么?

编辑:问题不在索引,问题是,如果我检查一些东西,然后我想得到一个指针,我得到上面提到的错误if语句

c++ pointers if-statement

2
推荐指数
1
解决办法
422
查看次数

是否可以在Java 8中编写JavaScript箭头函数?

这是JavaScript版本:

var counter = 1;
var incrementor = () => counter++;
incrementor();
console.log(counter);  // 2
Run Code Online (Sandbox Code Playgroud)

是否可以将其写为Java 8 lambda函数来进行这种简单的计数?

java lambda java-8

2
推荐指数
1
解决办法
434
查看次数

将数组划分为两个子数组,以便数组总和之间的差异最小?

输入是[4,13,14,15,16].输出应该是[16,15][14,13,4].

我可以想到以下算法在哪里

  1. 我按降序排序数组
  2. 将前两个元素放在两个列表中
  3. 现在添加列表中元素最小的元素

public class TestMinDiff {

    public static void main(String[] args) {
        Integer[] array = {4,13,14,15,16};

        Arrays.sort(array, Collections.reverseOrder());

        List<Integer> list1 = new ArrayList<Integer>();
        List<Integer> list2 = new ArrayList<Integer>();

        int list1Sum = 0;
        int list2Sum = 0;

        for(int i: array) {
            if(list1Sum<=list2Sum) {
                list1Sum = list1Sum + i;
                list1.add(i);
            } else {
                list2Sum = list2Sum + i;
                list2.add(i);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是

  1. 清单1是[16,13,4].
  2. 清单2是[15,14].

看起来我的算法需要进一步改进.对我而言,这似乎是一个NP问题.但我无法想到这里给出输出[16,15]和算法的算法 …

java arrays algorithm

2
推荐指数
1
解决办法
1091
查看次数

生成特定范围内的随机数

如何在范围(0,0.1)中生成随机数到2位小数.到目前为止,我的代码生成的数字在[0,0.1]范围内有两位小数:

radius = round(random.uniform(0, 0.1), 2)
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
2259
查看次数

如何使用 Ord::max 函数?

在这个微不足道的程序中,我尝试调用i32.max(i32)

fn main() {
    let a: i32 = 0;
    let b: i32 = 1;
    let c: i32 = a.max(b);  // <-- Error here
    println!("{}", c);
}
Run Code Online (Sandbox Code Playgroud)

但是我收到一个神秘的编译时错误:

fn main() {
    let a: i32 = 0;
    let b: i32 = 1;
    let c: i32 = a.max(b);  // <-- Error here
    println!("{}", c);
}
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?我正在使用 Rust 1.17.0。

如何使用max()(或min())函数?

如果我使用浮点值,则该示例有效:

let a: f32 = 0.0;
let b: f32 = 1.0;
let c: f32 = a.max(b);
Run Code Online (Sandbox Code Playgroud)

这让事情变得更加神秘。

compiler-errors rust

2
推荐指数
1
解决办法
1360
查看次数

UDP套接字处理

我正在处理UDP Socket的服务器端,每次都在线上遇到NullPointerException DatagramPacket receivePacket = new DatagramPacket(receiveData, 4096);.客户端是Python文件.这是服务器的代码.这些方法setup()draw()通过不同的加工文件调用.

import processing.net.*;
import java.io.*;
import java.net.*;
import java.util.*;

//Server myServer;
DatagramSocket serverSocket;
byte[] receiveData;
InetAddress IPAddressList;
int portList = -1;

void setup(){
  try{
      DatagramSocket serverSocket = new DatagramSocket(21567);
  }
  catch (IOException e){
    e.printStackTrace();
    System.out.println(e);
  }

   byte[] receiveData = new byte[4096];
}

void draw(){

  float P1,P2,P3;
  print ("hello");
  try{
     DatagramPacket receivePacket = new DatagramPacket(receiveData, 4096);
     serverSocket.receive(receivePacket);
     String greeting = new String(receivePacket.getData());
     System.out.println("From Client: " + greeting);
     IPAddressList = …
Run Code Online (Sandbox Code Playgroud)

java sockets processing

1
推荐指数
1
解决办法
1460
查看次数

JVM运行时如何保持向后兼容性?

我有一个简单的 Java 类,它使用 enum 保留关键字作为变量名。我能够在 Java 1.4 中编译此代码并在 Java 1.6 中执行它:

public class Main {

    public static void main(String[] args) {
        String enum = "ENUM String";
        System.out.println(enum);
    }

}
Run Code Online (Sandbox Code Playgroud)

然而,Java 1.6 编译器不会编译此代码,因为 enum 是保留关键字。为什么Java 1.6运行时仍然执行这段代码?

jvm backwards-compatibility

1
推荐指数
1
解决办法
215
查看次数

sftp中的transfermode类型

在传输模式(二进制,ASCII)方面,ftp和sftp tranfser类型之间有什么区别吗?在sftp传输中,我们仍然有二进制和ASCII传输选项,或者它是否具有默认模式,无论我们选择与否.

ftp sftp edtftpj

1
推荐指数
1
解决办法
2万
查看次数

Brainf*ck输入解释

我正在用Python编写Brainfuck解释器,我正在测试这段代码:

,>++++++[<-------->-],[<+>-]<.
Run Code Online (Sandbox Code Playgroud)

有了这个输入:

43
Run Code Online (Sandbox Code Playgroud)

波兰维基百科说结果应该是7,但有些事情并不恰到好处.我应该如何对待输入?如4和3或:'4'和'3'(52和51)?如果我将输入字符视为整数,则结果为-41,因为在第一个循环[0]为-44且[1]为0之后,[1]变为3,我们将该3添加到-44,因此结果为-41 .

另一方面,如果我将输入字符视为ASCII码,那么在第一个循环[0]为4且[1]为0之后,[1]变为51,我们将51添加到4,因此它会产生55.(这JavaScript解释器也给出结果55:https://www.nayuki.io/page/brainfuck-interpreter-javascript)

但是,我下载了一些用C编写的解释器,它给出了结果7,和维基百科说的一样...所以我很困惑.有解释器:http://pastebin.com/aasxLppa,这个解释器给出了结果7:brainfuck.tk -.-

python interpreter brainfuck

1
推荐指数
1
解决办法
563
查看次数